package br.com.pguide.activity;

import java.util.ArrayList;

import br.com.pguide.R;
import br.com.pguide.estrutura.Item;
import br.com.pguide.estrutura.ItemLista;
import br.com.pguide.parser.Parser;
import br.com.pguide.utils.Mensagem;
import br.com.pguide.webservice.WebService;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;

public class MinhaListaDeComprasActivity extends Activity {
	
	SQLiteDatabase banco;
	Cursor cursor_lista;
	Cursor cursor_item;
	EditText search;
	String username;
	ArrayList<ItemLista> lista_de_compras;
	public static final int STATUS_ATIVO_PARA_COMPRAR = 1;
	public static final int STATUS_ATIVO_COMPRADO = 2;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		lista_de_compras = new ArrayList<ItemLista>();
		Intent it = getIntent();
		username = it.getStringExtra("username");
		this.setContent();
	}
	
	private void setContent() {
		setContentView(R.layout.lista);
		this.preencher_lista();
		this.declarar_eventos();
	}
	
	public void adicionar(View view){
		AlertDialog.Builder dialog = new AlertDialog.Builder(this);
		dialog.setTitle(R.string.buscar);
		dialog.setMessage(R.string.mensagem_busca_nome);
		search = new EditText(this);
		dialog.setView(search);
		dialog.setPositiveButton(R.string.confirmar, new OnClickListener() {
			public void onClick(DialogInterface dialog, int which) {
				add_activity(search.getText().toString());
			}
		});
		dialog.setNegativeButton(R.string.cancelar, null);
		dialog.show();
	}
	
	public void add_activity(String nome_busca){
		Intent it = new Intent(this, AdicionarItemActivity.class);
		it.putExtra("nome_busca", nome_busca);
		it.putExtra("username", username);
		startActivity(it);
	}
	
	public void limpar(View view){
		AlertDialog.Builder dialog = new AlertDialog.Builder(this);
		dialog.setTitle(R.string.limpar);
		dialog.setMessage(R.string.confirmar_limpar_lista);
		dialog.setPositiveButton(R.string.confirmar, new OnClickListener() {
			public void onClick(DialogInterface dialog, int which) {
				remover_itens();
			}
		});
		dialog.setNegativeButton(R.string.cancelar, null);
		dialog.show();
	}
	
	public void voltar(View view){
		finish();
	}
	
	private void remover_itens(){
		delete_all_lista();
		preencher_lista();
	}
	
	private void preencher_lista() {
		String[] str_array = getItensLista();
		ListView lv = (ListView) findViewById(R.id.lista);
		
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_1, android.R.id.text1, str_array);
		
		lv.setAdapter(adapter);
	}
	
	private void declarar_eventos () {
		ListView lv = (ListView) findViewById(R.id.lista);
		
		lv.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView<?> adapter, View view, int position,
					long arg) {
				detalhes_item_clicado(position);
			}
		});
	}
	
	public void detalhes_item_clicado(final int position) {
		AlertDialog.Builder dialog = new AlertDialog.Builder(this);
		int mensagem = 1;
		if (lista_de_compras.get(position).getStatus() == STATUS_ATIVO_PARA_COMPRAR) {
			mensagem = R.string.marcar_comprado;
		} else if (lista_de_compras.get(position).getStatus() == STATUS_ATIVO_COMPRADO) {
			mensagem = R.string.marcar_comprar;
		}
		dialog.setPositiveButton(getString(mensagem), new OnClickListener() {
			public void onClick(DialogInterface dialog, int which) {
				if (lista_de_compras.get(position).getStatus()==1) {
					alterar_status(position, STATUS_ATIVO_COMPRADO);
				} else if (lista_de_compras.get(position).getStatus()==2) {
					alterar_status(position, STATUS_ATIVO_PARA_COMPRAR);
				}
			}
		});
		dialog.setNegativeButton(getString(R.string.remover_da_lista), new OnClickListener() {
			public void onClick(DialogInterface dialog, int which) {
				remover_da_lista(position);
			}
		});
		dialog.show();
	}
	
	public void alterar_status (int position, int novo_status) {
		String retorno = WebService.alterar_status_item(username, 
														  lista_de_compras.get(position).getID(), 
														  novo_status);
		if (retorno.equals("ok")) {
			lista_de_compras.get(position).setStatus(novo_status);
			if (novo_status==STATUS_ATIVO_COMPRADO) {
				Mensagem.exibirToastCurto(getString(R.string.item_marcado_comprado), this);
			} else if (novo_status == STATUS_ATIVO_PARA_COMPRAR) {
				Mensagem.exibirToastCurto(getString(R.string.item_marcado_comprar), this);
			}
		} else {
			Mensagem.exibirMensagem(retorno, this);
		}
		this.preencher_lista();
	}
	
	public void remover_da_lista (int position) {
		String retorno = WebService.remover_item_da_lista(username, lista_de_compras.get(position).getID());
		lista_de_compras.remove(position);
		if (retorno.equals("ok")) {
			Mensagem.exibirToastCurto(getString(R.string.item_removido_da_lista), this);
		} else {
			Mensagem.exibirMensagem(retorno, this);
		}
		this.preencher_lista();
	}
	
	private String[] getItensLista() {
		try {
			lista_de_compras = Parser.get_lista_de_compras(WebService.get_lista_de_compras(username), this);
		} catch (Exception e) {
			Mensagem.exibirMensagem(e.getMessage(), this);
		}
		String[] array = new String[lista_de_compras.size()];
		
		for (int i=0; i<lista_de_compras.size(); i++) {
			Item item = new Item();
			item = Parser.get_item(WebService.get_item(username, lista_de_compras.get(i).getItem()));
			array[i] = item.getNome() + " (" +
					   WebService.get_marca(Integer.parseInt(item.getMarca())) + ")\n" +
					   lista_de_compras.get(i).getQuantidade() + " " + item.getUnidade_de_medidaStr(Parser.lista_unidades_de_medida(WebService.get_unidades_de_medida()));
		}
		return array;
	}
	
	protected void onRestart() {
		super.onRestart();
		this.preencher_lista();
	};
	
	//=============================//
	//============ DAO ============//
	//=============================//
	
	public void delete_all_lista(){
		String results = WebService.limpar_lista(username);
		if (results.equals("ok")){
			Mensagem.exibirToastCurto(R.string.itens_removidos, this);
		} else {
			Mensagem.exibirMensagem(results, this);
		}
	}
}
